﻿/*******************************************************************************
* file  : rsa demo
* creat : apleilx
* data  : 2017/03/02
* @brief  	rsa 是一种非对称加密算法，加密解密KEY不同
*			此算法的应用传递过程：
*			A：生成密匙对，一个为公匙（用于传递），一个为私匙（自己持有）
*			B: 向A请求公匙
*			A：发送公匙给B
*			B: 用公匙加密数据发送给A
*			A：用私匙解密数据。用私匙加密数据发送给B
*			B: 用公匙解密数据
*******************************************************************************/
#include "common.h"
#include "crc_ext.h"
#include "mbedtls/rsa.h"
#include "mbedtls/entropy.h"
#include "mbedtls/ctr_drbg.h"
#include "bsp_api.h"
#include "stdio_cfg.h"

void ras_sim_key_fil_link(void);
void ras_sim_key_fil_unlink(void);

void ras_pub_enc(void);
void ras_priv_dec(void);
void ras_priv_enc(void);
void ras_pub_dec(void);
void ras_key_gen(void);

int rsa_gen_and_crypto(void);
int rsa_gen_signal(void);
int ras_key_sign(void);

void * rsa_src, *rsa_enc, *rsa_dec;

//------------------------------------------------------------------------------
void rak_key_gen_test(void);

int rsa_key_gen( int argc, char *argv[] );

/*******************************************************************************
* @brief  des_demo.
* \param[in] none
* \retval: none
*******************************************************************************/
void rsa_demo(void)
{
	ras_sim_key_fil_link();
	
	
	
	// rak_key_gen_test();
	

	rsa_src = malloc(2048);
	rsa_enc = malloc(2048);
	rsa_dec = malloc(2048);
	
	rsa_gen_and_crypto();
	//rsa_gen_signal();
	// ras_key_sign();
	/*
	ras_key_gen();
	ras_pub_enc();
	ras_priv_dec();
	ras_priv_enc();
	ras_pub_dec();
	*/
	
	free(rsa_src);
	free(rsa_enc);
	free(rsa_dec);
	
	ras_sim_key_fil_unlink();
}

/*******************************************************************************
* @brief  创建密匙测试，约耗时 450s.
* \param[in] none
* \retval: none
*******************************************************************************/
void rak_key_gen_test(void)
{
	uint32_t tick_start;
	void *argv;
	
	argv = malloc(100);	
	
	tick_start = app_tick_get();
	
	rsa_key_gen(1,argv);
	
	dbg_print("\n\nrsa key gen time: %d ms\n\n", app_tick_get() - tick_start);
	
	free(argv);
}

